The present invention relates to virtual machines in a computing environment and more specifically to tuning or adjusting resources, applications, and other logic present on one or more virtual applications or virtual machines in a computing environment or system.
Computing systems may be partitioned internally through the use of virtual machines or virtual containers. These machines or containers may be created to allow separate operating systems to run on a single hardware system, to provide for fail-over safety, for translating between otherwise non-compatible programs and/or operating systems, and for other reasons as well. The virtual machines or containers may be created such that they appear to be physical machines to the programs running on them. As a program needs resources to function, the virtual machine may provide them in support of the program. For example, when processing power or network communications are needed by an application, the virtual machine may facilitate the necessary processing power and the needed network communications between the application and the underlying physical system. This translation step is unperceivable to the application as the resources are provided.
Virtual machines are often considered to be isolated duplicates of physical machines and may be set up to have little or no direct correspondence to specific hardware. In other words, the virtual machine may have selected limits and thresholds that fall below the capabilities of the underlying physical system hardware on which the virtual machines are created and operating.
Virtual machines are often separated into two categories: system virtual machines and process virtual machines. A system virtual machine may provide a complete system platform on which multiple operating systems can co-exist in isolation from each other. In some instances the system virtual machines can provide instruction set architecture that may be tailored with differences from the underlying actual hardware. Comparatively, a process virtual machine, which may also be referred to as an application virtual machine, may run an application within a system virtual machine. The process virtual machine may support a single process and may be created when it is initiated and may be destroyed when the process ends.
Process virtual machines may be compiled at run time and may be carried out using an interpreter that serves to bridge between the virtual machine and the underlying physical hardware. Examples of virtual machines compiled at run time include Java virtual machines, Parrot virtual machines, and .NET Framework.
From teachings of this disclosure, one of skill in the art will appreciate that allocating resources for a single application at start-up is problematic because there are often other applications installed on the same machine. These other applications may deliberately and to their detriment contend for the same resources. Thus, without considering or weighing demands beyond a single application on start-up, the application may not be correctly optimized and may not correctly select and sequester the proper amount of resources needed from the available resources for improved or best available performance. Still further, the applications may not consider that certain resources are only needed during certain times by certain applications. Consequently, more resources may be allocated than needed, and the proper amount of resources may not be allocated as well. Furthermore, there may be other problems that work against the optimum use of virtual resources for the application as well.